package acm.pta;

import java.util.Scanner;

//manachar算法
public class T12 {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String str = sc.nextLine();
        char[] chars = addPartition(str);
        int[] radius=new int[chars.length]; //半径数组
        int C=-1;   //最右回文边界的中心下标
        int R=-1;   //最右回文边界
        int L=-1;   //最右回文边界对应的左边界
        int resIndex=0;
        for (int i = 0; i < chars.length; i++) {
            if (R<i){   //当前在右边界的右侧
                radius[i]=getRadius(chars,i-1,i+1);
                C=i;
                R=i+radius[i];
                L=i-radius[i];
                resIndex=radius[resIndex]<radius[i]?i:resIndex;
            }else{
                int j=C-(i-C);  //i的对称点
                if (j-radius[j]>L) {
                    radius[i]=radius[j];
                }else if (j-radius[j]<L){
                    radius[i]=R-i;
                }else{
                    radius[i]+=getRadius(chars,i-(R-i)-1,R+1);
                    if (radius[i]+i>R){
                        R=i+radius[i];
                        C=i;
                        L=i-radius[i];
                        resIndex=radius[resIndex]<radius[i]?i:resIndex;
                    }
                }
            }
        }
        System.out.println(radius[resIndex]);
    }
    public static char[] addPartition(String s){
        char[] chars=new char[s.length()*2+1];
        for (int i = 0; i < chars.length; i++) {
            chars[i]=i%2==0?'#':s.charAt(i/2);
        }
        return chars;
    }

    /**
     * 获取回文串的半径（暴力解）
     */
    public static int getRadius(char[] chars,int l,int r){
        while (l>=0&&r<chars.length&&chars[l]==chars[r]){
            l--;
            r++;
        }
        return (r-l)/2-1;
    }
}
